package com.it.bigintegerdemo;

import java.math.BigInteger;
import java.util.Random;

public class BigintegerDemo1 {
    public static void main(String[] args) {
        /*
            public BigInteger(int num, Random rnd)：生成一个在 [0 ~ 2的num次方-1] 范围内的随机大整数。
            public BigInteger(String val)：将字符串表示的整数转换为 BigInteger。
            public BigInteger(String val, int radix)：将指定进制的字符串表示的整数转换为 BigInteger。
            public static BigInteger valueOf(long val)：从 long 类型创建 BigInteger，内部有优化。
            此外，BigInteger 对象是不可变的，一旦创建，其值不能被修改。
         */

        //1.获取一个随机的大整数
        /*Random r = new Random();
        for (int i = 0; i < 100; i++) {
            BigInteger bd1 = new BigInteger(4, r);
            System.out.println(bd1);
        }*/

        //2.获取一个指定的大整数
        //细节：字符串中必须是整数，否则会报错
        /*BigInteger bd2 = new BigInteger("1");
        System.out.println(bd2);

        BigInteger bd3 = new BigInteger("abc");//报错
        System.out.println(bd3);*/


        //3。获取指定进制的大整数
        //细节：
        //1.字符串中的必须是整数
        //2.字符串中的数字必须跟进制吻合
        //比如二进制中，那么就只能写0和1，写其他的就报错
        BigInteger bd4 = new BigInteger("100",2);//如果前面写的是123，就会报错，因为不是进制
        System.out.println(bd4);

        //4.静态方法获取BigInteger的对象，内部有优化
        //细节：
        //1.能表示范围比较小，只能在long的取值范围之内，如果超过long的范围就不行了
        //2.在内部对象用的数字，-16~16进行了优化。
        // 提前把-16~16先创建好Biginteger的对象，如果多次获取不会重新创建新的
       BigInteger bd5 = BigInteger.valueOf(16);
       BigInteger bd6 = BigInteger.valueOf(16);

        System.out.println(bd5 == bd6);//true

        BigInteger bd7 = BigInteger.valueOf(17);
        BigInteger bd8 = BigInteger.valueOf(17);

        System.out.println(bd7 == bd8);//flase

    }
}
